# remotes

- 类型：`PluginRemoteOptions`
- 是否必填：否
- 默认值：`undefined`
- 使用场景：用 `Module Federation` 消费远程模块

:::tip
消费者者特有参数，设置了 `remotes` 则可认为这是一个消费者

:::

`PluginRemoteOptions` 类型如下：

```tsx
type ModuleFederationInfo = string;
interface PluginRemoteOptions {
  [remoteAlias: string]: ModuleFederationInfo;
}
```

- `remoteAlias` 为实际用户引用的名称，可自行配置，例如设置了 `remoteAlias` 为 `demo` ，那么消费方式为 `import xx from 'demo'` 。
- `ModuleFederationInfo` 由 `ModuleFederation name` + `@` + `ModuleFederation entry` 组成
  - `ModuleFederation name` 是生产者设置的名称
  - `entry` 可以为 `mf-manifest.json` 和 `remoteEntry.js`
  - `entry` 为 `mf-manifest.json` 拥有以下额外能力
    - 动态模块类型提示
    - 资源预加载
    - chrome devtool 调试工具

```js
module.exports = {
  plugins: [
    new ModuleFederationPlugin({
      name: 'host',
      // 下面的 remotes 中定义了两个 remote，分别是名称为：manifest_provider 在 3011 端口启动的项目、js_entry_provider 在 3012 端口启动的项目
      remotes: {
        'manifest-provider':
          'manifest_provider@http://localhost:3011/mf-manifest.json',
        'js-entry-provider':
          'js_entry_provider@http://localhost:3012/remoteEntry.js',
      },
    }),
  ],
};
```
